﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Aeroporto.controle;
using Aeroporto.modelo;
using Aeroporto.bd;
using System.Collections;
using Aeroporto.visao;


namespace Aeroporto.visão
{
    public partial class formTrecho : Form
    {
        private TrechoControl control_trecho = new TrechoControl();
        private string companhia_atual;
        
        public formTrecho(string companhia_atual)
        {        
            InitializeComponent();
            this.companhia_atual = companhia_atual;
        }

        private void formTrecho_Load(object sender, EventArgs e)
        {
            lista_dados();
            te_siglaComp.ReadOnly = true;            
            te_idTrecho.Select();
        }

        private bool checkBox_Unchecked()
        {
            cb_domingo.Checked = false;
            cb_quarta.Checked = false;
            cb_quinta.Checked = false;
            cb_sabado.Checked = false;
            cb_segunda.Checked = false;
            cb_sexta.Checked = false;
            cb_terca.Checked = false;
            return true;
        }

        private void lista_dados()
        {
            try
            {                
                grid_trechos.DataSource = control_trecho.lista_dados("trecho");
                this.grid_trechos.Columns["Horario"].DefaultCellStyle.Format = "hh:mm:ss";                
                /*                
                for (int i = 0; i < grid_trechos.Rows.Count-1; i++)
                {
                    if (grid_trechos[4, i].Value.ToString().Length > 11)
                    {                        
                        grid_trechos[4, i].Value = grid_trechos[4, i].Value.ToString().Substring(11);
                    }
                }*/

                grid_trechos.Sort(grid_trechos.Columns["id_trecho"], ListSortDirection.Ascending);
                grid_trechos.Columns["id_trecho"].HeaderText = "IDTrecho";
                grid_trechos.Columns["sigla_comp"].HeaderText = "Sigla Companhia";
                grid_trechos.Columns["num_voo"].HeaderText = "Número Voo";
                grid_trechos.Columns["origem"].HeaderText = "Origem do Trecho";
                grid_trechos.Columns["destino"].HeaderText = "Destino do Trecho";
                grid_trechos.Columns["horario"].HeaderText = "Horario";
                grid_trechos.Columns["seg"].HeaderText = "Segunda";
                grid_trechos.Columns["ter"].HeaderText = "Terça";
                grid_trechos.Columns["qua"].HeaderText = "Quarta";
                grid_trechos.Columns["qui"].HeaderText = "Quinta";
                grid_trechos.Columns["sex"].HeaderText = "Sexta";
                grid_trechos.Columns["sab"].HeaderText = "Sabado";
                grid_trechos.Columns["dom"].HeaderText = "Domingo";
                //grid_trechos.Columns["diaSemana"].HeaderText = "Dia da Semana";
                atualiza_campos();
                grid_trechos.ReadOnly = true;                
            }
            catch (Exception erro)
            {
                MessageBox.Show("Erro na listagem do Grid: " + erro);
            }
        }

        private void atualiza_campos()
        {
            int linha = grid_trechos.CurrentRow.Index;
            te_idTrecho.Text = grid_trechos[12, linha].Value.ToString();
            //te_siglaComp.Text = grid_trechos[0, linha].Value.ToString();
            te_siglaComp.Text = companhia_atual;
            te_numVoo.Text = grid_trechos[1, linha].Value.ToString();
            te_origemTrecho.Text = grid_trechos[2, linha].Value.ToString();
            te_destinoTrecho.Text = grid_trechos[3, linha].Value.ToString();
            te_horario.Text = grid_trechos[4, linha].Value.ToString();
            if(te_horario.Text.Length > 11)            
                te_horario.Text = te_horario.Text.Substring(11);
                        
            try
            {
                cb_segunda.Checked = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[5].Value) == true ? true : false;
                cb_terca.Checked   = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[6].Value) == true ? true : false;
                cb_quarta.Checked  = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[7].Value) == true ? true : false;
                cb_quinta.Checked  = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[8].Value) == true ? true : false;
                cb_sexta.Checked   = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[9].Value) == true ? true : false;
                cb_sabado.Checked  = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[10].Value) == true ? true : false;
                cb_domingo.Checked = Convert.ToBoolean(grid_trechos.Rows[linha].Cells[11].Value) == true ? true : false;
            }
            catch (Exception e)
            {
                checkBox_Unchecked();
                Arquivo.escrever(e.ToString());
            }            
        }

        private void b_inserir_Click(object sender, EventArgs e)
        {
            MyMessageBox message_box = control_trecho.valida_insert_trecho(companhia_atual,te_numVoo.Text,te_origemTrecho.Text,te_destinoTrecho.Text,te_idTrecho.Text,te_horario.Text, cb_segunda.Checked, cb_terca.Checked, cb_quarta.Checked, cb_quinta.Checked, cb_sexta.Checked, cb_sabado.Checked, cb_domingo.Checked);  //valida e insere dados dos TextEdit's
            if (message_box != null)
            {
                MessageBox.Show(message_box.String1, message_box.String2);
            }
            else
            {

            }
        }

        private void limpar()
        {
            te_idTrecho.Text = "";
            te_siglaComp.Text = companhia_atual;
            te_numVoo.Text = "";
            te_origemTrecho.Text = "";
            te_destinoTrecho.Text = "";
            te_horario.Text = "";
            checkBox_Unchecked();
        }

        /**
         * Quando o botão Pesquisar é clicado, o DataSource do grid_reservas é alterado
         */
        private void bu_pesquisar_Click(object sender, EventArgs e)
        {
            //grid_trechos.DataSource = control_trecho.pesquisar_siglas(te_pesquisar.Text);
            grid_trechos.DataSource = control_trecho.pesquisar_aeroporto(te_pesquisar.Text, companhia_atual);
        }

        private void b_deletar_Click(object sender, EventArgs e)
        {
            if (te_idTrecho.Text == "" && te_numVoo.Text == "" && te_origemTrecho.Text == "" && te_destinoTrecho.Text == "" && te_horario.Text == "")
            {
                MessageBox.Show("Selecione um trecho na tabela de Trechos para excluir!", "Atenção:");
                return;
            }

            ArrayList chaves_primarias = new ArrayList();
            foreach (DataGridViewRow r in grid_trechos.SelectedRows)
            {
                chaves_primarias.Add(r.Cells[12].Value.ToString());
            }

            if (MessageBox.Show("Tem certeza que deseja excluir " + chaves_primarias.Count + " trechos", "Trecho", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                MyMessageBox message_box = control_trecho.excluir_trecho(chaves_primarias);
                MessageBox.Show(message_box.String1, message_box.String2);
                lista_dados();
            }
        }

        private void b_editar_Click(object sender, EventArgs e)
        {
            string chave_primaria_antiga = grid_trechos[12, grid_trechos.CurrentCell.RowIndex].Value.ToString();   //pegamos a chave primária antiga que se encontra no grid, pois, precisamos verificar se a chave primária foi alterada
            MyMessageBox message_box = control_trecho.valida_update_trecho(
                companhia_atual, te_numVoo.Text, te_origemTrecho.Text, te_destinoTrecho.Text, te_idTrecho.Text, te_horario.Text, chave_primaria_antiga, cb_segunda.Checked, cb_terca.Checked, cb_quarta.Checked, cb_quinta.Checked, cb_sexta.Checked, cb_sabado.Checked, cb_domingo.Checked);//valida e atualiza os dados da reserva
            MessageBox.Show(message_box.String1, message_box.String2);//exibe mensagem dizendo se foi ou não atualizado os dados
            lista_dados();//atualiza os dados do grid
        }

        private void bu_atualizar_Click(object sender, EventArgs e)
        {
            lista_dados();
        }

        private void formTrecho_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

        private void grid_trechos_CellEnter(object sender, DataGridViewCellEventArgs e)
        {         
            atualiza_campos();            
        }

        private void grid_trechos_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void b_limpar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        private void te_horario_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
